/**
 * 数据处理
 */

/**
 * 合并对象，只合并原有对象中存在的参数，用法同 Object.assign()
 * @param {object} target 原对象
 * @param {object[]} sources 要合并覆盖的对象，可多个
 * @return {object} 合并的对象
 */
export function assignOverrideWithHas(target: object, ...sources: object[]): object {
  sources.forEach((source) => {
    for (const key in source) {
      if (source.hasOwnProperty(key) && target.hasOwnProperty(key)) {
        target[key] = source[key];
      }
    }
  });
  return target;
}

/**
 * 合并对象，只合并真值，用法同 Object.assign()
 * @param {object} target 原对象
 * @param {object[]} sources 要合并覆盖的对象，可多个
 * @return {object} 合并的对象
 */
export function assignOverrideWithTrue(target: object, ...sources: object[]): object {
  sources.forEach((source) => {
    for (let key in source) {
      if (source.hasOwnProperty(key)) {
        if (source[key]) {
          target[key] = source[key];
        }
      }
    }
  });
  return target;
}
